1
内部架构:klass 和 super 指针
AI035Lesson 14
00:00

在 C 层级,Ruby 对象由结构体表示,这些结构体通过指针层级将 数据与行为分离 通过基于指针的层次结构实现。其中, klass 指针将一个实例与其“关联类”(方法所在位置)连接起来,而 super 指针则将类与其祖先连接起来,构建出一种结构化映射,供 Ruby 虚拟机用于解析继承关系。

1. klass 指针与标志位

每个 Ruby 对象都包含一个头部,其中包含一个 klass 指针和一个标志位掩码 flags。这些标志位用于标识对象的内部状态,例如用 'V' 来标记自动创建的“虚拟类”,以处理单例方法的分配。

2. 解耦状态(图 24.1)

lucille 这样的实例会存储其独有的 实例变量,但它自身并不拥有任何方法。它的 klass 指针将虚拟机引导至 Guitar 类对象的方法表。

lucille@value类:Guitarplay()strings()V类:Objectclone(), dup()klasssuper

3. 继承链

lucille.play() 被调用时,Ruby 会沿着 klass 指针查找。如果在 Guitar中未找到该方法,则沿着 super 指针指向 Object,从而获得对 clonedup的访问权限。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>